package com.raft.core.log.entry;

/**日志条目
 * @author zhangsulei
 *
 */
public interface Entry {

	// 以KIND开头的常量为日志条目的类型
    int KIND_NO_OP = 0;
    int KIND_GENERAL = 1;
    int KIND_ADD_NODE = 3; // 添加节点
    int KIND_REMOVE_NODE = 4; // 移除节点

    /**获取类型
     * @return
     */
    int getKind();

    /**获取索引
     * @return
     */
    int getIndex();

    /**获取term
     * @return
     */
    int getTerm();

    /**获取元信息(kind、term和index)<br/>
     * 返回除了CommandBytes以外的日志条目元信息，用于选举开始发送的RequestVote消息中，只需要用最后一条日志的term和index来组装RequestVote消息，此时可以调用日志组件获取最后一条日志的元信息，避免访问日志的负载
     * @return
     */
    EntryMeta getMeta();

    /**获取日志负载
     * @return
     */
    byte[] getCommandBytes();

}
